<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Persona_lst( $this );

	class Persona_lst extends Lst
	{
	function Persona_lst( &$oModule )
		{
			$this->Lst( $oModule );
			$this->oDomicilio = $this->oModule->loadClass( 'Domicilio_frm' );
			$this->oFecha = new dateObject();
			if ( getParam( PARAM_KEYLOOKUP ) )  $this->aFields['cKeyLookUp'] = getParam( PARAM_KEYLOOKUP );
		}
	function setLevel()
		{
			switch ( $this->getOptionView() )
			{
				case 'C':
				case 'E':
					$this->aShowColumns = array( 'Nombre' );
					break;
				case 'L':
					$this->aShowColumns = array( 'bEstrella','ncRotulo', 'Nombre' );
					break;
			}
		}
	function initialize()
		{
			$this->oFiltro = $this->oModule->loadClass( 'Persona_frm' );
			$this->aFields = array_merge ( (array)$this->aFields,  (array)$this->oFiltro->getFieldArray() );
			
			// Obtiene de su filtro los parametros que necesita para armar el query
			$this->aFields['aRotulo'] = is_array( getParam( 'aRotulo' ) )  ? implode(",", getParam( 'aRotulo' ) ): getParam( 'aRotulo' );
			$this->setTitle ( "Contactos" );
			$this->setSummary( "Esta tabla contiene los contactos" );
			$this->addColumnStar ( 'bEstrella', MODIFICAR_ESTRELLA_PERSONA, 'ncPersona', 'bEstrella' );
			$this->addColumnImageUrl ( 'Foto', 'cImagen', true,  '',  URL_ROOT . '?' . PARAM_REFRESH . '=file&amp;' . PARAM_METHOD . '=getImage&amp;cImage=' .  "/personas/" );
			$this->addColumnTag( 'ncRotulo', ACTUALIZAR_TAG_PERSONA, 'ncPersona', 'atPersonaRotulo', $this->oDatabase->getKeyArray('SELECT ncRotulo, cdRotulo FROM atRotuloPersona' ) );
			$this->addColumn ( 'Nombre', '', 'cApellido' );
			$this->addColumn ( 'Particular', '', '' );
			$this->addColumn ( 'Celular', 'cCelular', '' );
			$this->addColumn ( 'Genero', 'cdGenero', '' );
			$this->addColumn ( 'Observacion', 'cObservacion', '' );
			$this->addColumn ( 'Cumple', '', '' );
			$this->addColumn ( 'Email' );
			if ( $this->getOptionView() != 'C' )
			{
				$this->setIndex( INDEX_ABC, TAB_BOTTOM );
				$this->aFields['cApellido'] = $this->getIndex(TAB_BOTTOM);
				$this->setColumnAction( 'Nombre', VER_PERSONA , 'ncPersona' , '&bComplex=-1');
			}
		}
	function makeColumn ( $aRow, $cField )
		{
			switch( $cField )
			{
				case 'KeyDay':
					$this->oFecha->setValue( $aRow['dNacimiento'] );
					$cReturn =  $this->oFecha->getValue();
					break;
				case 'Cumple':
					$this->oFecha->setValue( $aRow['dNacimiento'] );
					$cReturn = $this->oFecha->getShortDescription(false);
					break;
				case 'Email':
					$cSql = "SELECT cEmail FROM atPersonaEmail WHERE ncOrganizacion is null and ncPersona = " . $aRow['ncPersona'];
					$aEmail = $this->oDatabase->getArray($cSql);
					$cReturn = implode( "," , $aEmail ) ;
					break;
				case 'Nombre':
					$cReturn = $aRow['cTratamiento'] ? $aRow['cTratamiento']  . " ": "";
					$cReturn .= $aRow['cNombre'] ;
					if ( $aRow['cAlias'] ) $cReturn .= " ( " . $aRow['cAlias']  . " )";
					$cReturn .= ' ' . $aRow['cApellido'] ;
					break;
				case 'KeyLookUp':
					$cReturn = $aRow['ncPersona'];
					break;
				case 'DescriptionLookUp':
					$cReturn = $aRow['cNombre'] . ' ' . $aRow['cApellido'];
					break;
				case 'Particular':
					$this->oDomicilio->setValue ( $this->aRow['ncDomicilio']  ) ;
					$cReturn = $this->oDomicilio->getDescription();
					$cReturn .= $this->oDomicilio->getFieldValue('cPrefijoTelefono') . $this->oDomicilio->getFieldValue('cTelefono');;
					break;
				default:
					return false;
			break;
			}
			return $cReturn;
		}
	function query()
		{
				$ncMiGrupo = obtenerMiGrupo();
			// Si filtra por Ubicacion toma algunos datos
				if ( $this->aFields[ncUbicacion]  )
				{
					list($ncPais, $ncUbicacion ) = explode('|', $this->aFields[ncUbicacion] );
					$cSql = "SELECT cCamino  FROM acUbicacion WHERE ncPais = $ncPais AND ncUbicacion = $ncUbicacion";
					$cCamino =  $this->oDatabase->getData( $cSql ) ;
				}
			// Arma el Query
				$cSql = "SELECT Per.bEstrella, cdGenero, Per.ncPersona, Per.cApellido, Per.cNombre, Per.cCelular,Per.cObservacion, Per.cAlias, Per.dNacimiento, PDo.ncDomicilio, Pro.cTratamiento, Per.cImagen
							FROM atPersona as Per
								LEFT JOIN acGenero as Gen
									ON Gen.ncGenero = Per.ncGenero
							LEFT JOIN atProfesion Pro
								ON Pro.ncProfesion = Per.ncProfesion
							LEFT JOIN atPersonaDomicilio as PDo
								ON PDo.ncPersona = Per.ncPersona
								AND PDo.ncTipoDomicilio = ". DOMICILIO_PARTICULAR . "
								AND PDo.bPorOmision = 1";
			// Arma Join Dinamico
				$cSql .= armarJoin ( " JOIN atListaPersona AS LPe ON LPe.ncPersona = Per.ncPersona AND LPe.ncLista = $ncLista ", $ncLista);
				$cSql .= armarJoin ( " JOIN atPersonaEmail AS Ema ON Ema.ncPersona = Per.ncPersona AND Ema.cEmail LIKE '%$cEmail%' ", $cEmail);
				$cSql .= armarJoin ( " JOIN atDomicilio AS Dom
											ON Dom.ncDomicilio = PDo.ncDomicilio
											AND Dom.ncPais = $ncPais
										JOIN acUbicacion as Ubi
											ON Ubi.cCamino LIKE '$cCamino%'
											AND Ubi.ncPais = $ncPais " , $ncPais  );
				$cSql .= armarJoin (" JOIN atPersonaRotulo as ERo ON ERo.ncPersona = Per.ncPersona AND ERo.ncRotulo IN ( $aRotulo  ) " , $aRotulo );
			// Arma el Filtro de la Consulta
				$cNombre = $this->aFields[cNombre];
				if ( $this->aFields[bProximosCumple] ) 
				{	
					unset($this->aFields[bProximosCumple]);
					$this->oWhere->addExpression ( "Per.dNacimiento", "MONTH(Per.dNacimiento) = " . Date( "m" ) );
				}				
				$this->oWhere->addArray ( $this->oFiltro->getFilterdArray(), 'Per' );
				if ( $this->getOptionView() == 'C' ) list( $dDesde, $dHasta ) = $this->getDateRange();
				if ( $dDesde && $dHasta ) $this->oWhere->add( $this->oDatabase->dbMakeDate( substr($dHasta, 0, 4) , $this->oDatabase->dbMonth('Per.dNacimiento'), $this->oDatabase->dbDay('Per.dNacimiento') ), "$dDesde,$dHasta", "between");
				if ( $ncMiGrupo )
					$this->oWhere->addExpression ( "Per.ncVisibilidad", " (Per.ncVisibilidad <> " . VISIBILIDAD_PRIVADO . " OR Per.ncGrupo = $ncMiGrupo) " );
				else
					$this->oWhere->addExpression ( "Per.ncVisibilidad", " Per.ncVisibilidad = " . VISIBILIDAD_PUBLICO );
				if ( $cNombre ) $this->oWhere->addExpression ( "cNombre", "concat( ' ' , cNombre, ' ',  cApellido) LIKE '%$cNombre%' OR cAlias LIKE '%$cNombre%' " );
				$this->oWhere->addKey ( $this->oDatabase->dbConcat( "' '", "cNombre", "' '", "cApellido", "' '", " ifnull(cAlias,'') "  ), $this->aFields[cKeyLookUp] ); //
				return $cSql . $this->oWhere->make();
		}
	function makeListActions()
		{
			$this->oModule->setBack();
			$cParametroRegistro =  $this->getFieldString();
			$this->addListAction ( AGREGAR_UNA_PERSONA , $cParametroRegistro, 'I', VENTANA_SECUNDARIA);
			//$this->addListAction ( AGREGAR_UNA_PERSONA_Y_ORGANIZACION, $cParametroRegistro, '', VENTANA_SECUNDARIA );
			$this->addListAction ( SALIDA_OUTLOOK, $cParametroRegistro );
		}
	function makeRowActions( $aRow )
		{
			$cParametroRegistro =  "ncPersona=" . $aRow["ncPersona"];
			$this->addRowAction ( MODIFICAR_UNA_PERSONA, $cParametroRegistro, '' );
			$this->addRowAction ( ELIMINAR_UNA_PERSONA, $cParametroRegistro);
		}
	function makeComplex()
		{
			//if ( getParam('bComplex') == -1 ) return false;
			// Domicilios
			$oLst = $this->oModule->loadClass ( "persona_domicilio_lst" );
			$oLst->aFields['ncDomicilio'] = '';
			$oLst->aFields['ncPersona'] = $this->aFields['ncPersona'];
			$oLst->setNoPaging();
			$oLst->open();
			if ( $oLst->oRecordset->count() > 0 )
			{
				$oLst->make( 'NNNRD' );
			}
			// Orgnizacion
			$oLst = $this->oModule->loadClass ( "organizacion_persona_lst" );
			$oLst->aFields['ncPersona'] = $this->aFields['ncPersona'];
			$oLst->setNoPaging();
			$oLst->makeDir();
		}
	}
?>
